package com.smarthome.api.ipc;

// @Service()
// public class IpcServerHandler extends IoHandlerAdapter {
//
// private static final Logger LOGGER = LoggerFactory.getLogger(IpcServerHandler.class);
// private static Map<String, IoSession> sessions = new HashMap<String, IoSession>();
//
// @Resource
// private EquipmentInfoService equipmentInfoService; // 设备基础信息service
// @Resource
// private IpcServerCommandUtil ipcServerCommandUtil; // service
//
// @Override
// // 服务端接收数据
// public void messageReceived(IoSession session, Object message) throws Exception {
// String clientIP = (String) session.getAttribute(ApiCachedKeysUtil.getKey(ApiCachedKeysUtil.MODULE_IPC_IP,"1"));
// LOGGER.info("工控机IP地址-----------：" + clientIP);
// String requestStr = message.toString();
// LOGGER.info("服务端收到工控机消息：" + requestStr);
// if (!StringUtils.isBlank(requestStr)) {
// requestStr = requestStr.replaceAll("\\\\\"", "\"");
// requestStr = requestStr.substring(1, requestStr.length() - 1);
// LOGGER.info("服务端收到工控机消息2：" + requestStr);
// JSONObject requestObj = JSONObject.parseObject(requestStr);
// String commandName = requestObj.getString(IpcConstants.IPC_COMMAND_NAME);
// if (!StringUtils.isBlank(commandName)) {
// String ipcId = "0";
// if (IpcConstants.IPC_COMMAND_INIT.equals(commandName)) {// 初始化指令,建立socket连接
// // ,并将session存入本地缓存中.注:后续放入redis缓存中
// ipcId = requestObj.getString(IpcConstants.IPC_ID);
// // 判断ipcId是否已经注册
// ShEquipmentInfo equipmentInfo = new ShEquipmentInfo();
// equipmentInfo.setDeviceMac(ipcId);
// List<ShEquipmentInfo> equipmentInfoList = equipmentInfoService.queryShEquipmentInfoList(equipmentInfo);// 得到工控机(主设备)的mac地址
// if (equipmentInfoList == null || equipmentInfoList.size() < 1) {
// IpcResponse<String> response = new IpcResponse<String>();
// response.setIpcCodeObj(IpcCodeEnum.SYSTEM_ERROR);
// response.setData("MAC地址" + ipcId + "未注册");;
// session.write(CommandExporter.parseJsonForIpcResponse(response));
// return;
// }
// // TODO 校验id有效性
// session.setAttribute(IpcConstants.IPC_ID, ipcId);
// // if (!sessions.containsKey(ApiCachedKeysUtil.getKey(ApiCachedKeysUtil.MODULE_IPC_SESSION, String.valueOf(ipcId).toUpperCase()))) {
// sessions.put(ApiCachedKeysUtil.getKey(ApiCachedKeysUtil.MODULE_IPC_SESSION, String.valueOf(ipcId).toUpperCase()), session);
// // }
// // 初始化海康门口机
// // 1.根据IPCID获取小区里所有的门口机
// // 2.调用工控机服务对所有的门口机进行初始化
// /*
// * HkIpcResidenceDoorOpRequest request = new HkIpcResidenceDoorOpRequest(); request.setDeviceId(equipmentInfo.getSelfCode());// 序列号 request.setIp(equipmentInfo.getDeviceIp());
// * request.setCommand(IpcConstants. IPC_COMMAND_RESIDENCE_DOOR_INIT_HK); ipcServerCommandUtil.sendCommand(ipcId, request); // 执行相关操作
// */
// } else {
// // 调用平台服务
// IpcResponse<?> response = CommandExporter.doCommand(ipcId, requestObj);
// // 获取结果
// String responseStr = CommandExporter.parseJsonForIpcResponse(response);
// // 将结果推送回工控机
// session.write(responseStr);
// }
// } else if (requestObj.containsKey("threadId") && !StringUtils.isBlank(requestObj.getString("threadId"))) {
// String key = ApiCachedKeysUtil.getKey(ApiCachedKeysUtil.MODULE_IPC_THREADID, String.valueOf(requestObj.getString("threadId")).toUpperCase());
// requestObj.remove("threadId");
// JedisUtils.set(key, requestObj);
// }
// }
// }
//
// @Override
// // 服务端与客户端创建连接
// public void sessionCreated(IoSession session) throws Exception {
// super.sessionCreated(session);
// String clientIP = ((InetSocketAddress)session.getRemoteAddress()).getAddress().getHostAddress();
// session.setAttribute(ApiCachedKeysUtil.getKey(ApiCachedKeysUtil.MODULE_IPC_IP,"1"), clientIP);
// }
//
// @Override
// // 服务端与客户端连接打开
// public void sessionOpened(IoSession session) throws Exception {
// super.sessionOpened(session);
// }
//
// @Override
// // 服务端与客户端连接关闭
// public void sessionClosed(IoSession session) throws Exception {
// super.sessionClosed(session);
// if (session.containsAttribute(IpcConstants.IPC_ID)) {
// long ipcId = (long) session.getAttribute(IpcConstants.IPC_ID);
// // JedisUtils.del(ApiCachedKeysUtil.getKey(ApiCachedKeysUtil.MODULE_IPC_SESSION,
// // String.valueOf(ipcId)));
// getSessions().remove(ApiCachedKeysUtil.getKey(ApiCachedKeysUtil.MODULE_IPC_SESSION, String.valueOf(ipcId)));
// LOGGER.info("服务端移除session-ipcId：" + ipcId);
// }
// }
//
// @Override
// // 服务端发送信息成功
// public void messageSent(IoSession session, Object message) throws Exception {
// super.messageSent(session, message);
// LOGGER.info("服务端发送消息：" + message.toString());
// }
//
// @Override
// // 服务端发送异常
// public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
// cause.printStackTrace();
// }
//
// @Override
// // 服务端进入空闲状态
// public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
// }
//
// public Map<String, IoSession> getSessions() {
// return sessions;
// }
// }
